#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <pthread.h>
#include <stdlib.h>

// 模拟一个长时间的计算任务
int calc_sqr(int num)
{
    int sqr = num * num;
    sleep(1);
    return sqr;
}

// 在分线程执行的函数
void *calc_thread_func(void *arg)
{
    int num = *(int *)arg;
    int *result = malloc(sizeof(int));

    *result = calc_sqr(num);

    // return result;
    pthread_exit(result);  // 结束当前线程
}

int main(int argc, char const *argv[])
{
    int nums[5] = {1, 2, 3, 4, 5};
    int sqrs[5];

    struct timeval start, end;
    gettimeofday(&start, NULL);

    pthread_t threads[5];

    // 计算多个数的平方
    for (int i = 0; i < 5; i++)
    {
        // sqrs[i] = calc_sqr(nums[i]);
        // 创建分线程去进行长时间计算
        pthread_create(&threads[i], NULL, calc_thread_func, &nums[i]);
    }

    // 等待所有分线程执行完毕
    for (int i = 0; i < 5; i++)
    {
        void *result;
        pthread_join(threads[i], &result);
        sqrs[i] = *(int *)result;
    }
    
    gettimeofday(&end, NULL);
    printf("时间：%ld \n", end.tv_sec - start.tv_sec);

    // 计算平方和
    int total = 0;
    for (int i = 0; i < 5; i++)
    {
        total += sqrs[i];
    }
    printf("Total: %d\n", total);
    
    return 0;
}




